#ifndef BELLMANFORDTEST_H
#define BELLMANFORDTEST_H

#include <time.h>
#include <iostream>

#include <boost/config.hpp>
#include <boost/graph/graph_traits.hpp>
#include <boost/graph/properties.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/bellman_ford_shortest_paths.hpp>

#include "SimpleGraph.h"
#include "CompleteGraph.h"
#include "Generator.h"
#include "Helper.h"

namespace zbp
{
	double n_bellman_ford_SimpleGraph_test(zbp::SimpleGraph graph, bool display);
	double n_bellman_ford_initialized_SimpleGraph_test(zbp::SimpleGraph graph, bool display);
	double n_bellman_ford_boost_test(zbp::BoostEdge *edge_array, int *weights, int nodes_count, int edges_count, bool display);
	double n_bellman_ford_CompleteGraph_test(CompleteGraph<int>, bool display);

	double bellman_ford_SimpleGraph_test(int s, zbp::SimpleGraph graph, bool display);
	double bellman_ford_initialized_SimpleGraph_test(int s, zbp::SimpleGraph graph, bool display);
	double bellman_ford_boost_test(int s, zbp::BoostEdge *edge_array, int *weights, int nodes_count, int edges_count, bool display);

	void bellman_ford_tests_run(zbp::SimpleGraph simple_graph, zbp::BoostEdge* boost_edges, int* boost_weights, int nodes_count, int edges_count, int s);

	struct EdgeProperties {
		int weight;
	};
}

#endif